<?php
/**
 * Copyright (c) 2008-2011 Submit Consulting. Lima-Peru. All Right Reserved.
 * @author Ing. Angel Sullon M. (asullom@hotmail.com)
 * Created: 21.SEP.2000
 * Last Modify: 11.AGO.2011
 * Description of ProductoData: CRUD
 */
class ProductoData {

	public function create(Producto $nuevo) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$tran->begin();
			$qry=" SELECT COALESCE(MAX(ProductoId)+1,1) AS Id FROM Producto ";
			$rs=mysql_query($qry) or die("<p class=error>".mysql_error()." table Producto</p>");
			if( $row=mysql_fetch_array($rs) )
			$nuevo->setProductoId( $row["Id"] );
			$qry=" INSERT INTO Producto
            	(ProductoId,IteracionId,Titulo,Descripcion,Estado,
            	CriterioAcepta,Importancia,Estimacion,AsignadoA,Historia, FechaAlta)
                values(?,?,?,?,?   ,? ,?,?,?,?, now()) ";
			$pre = new PrepareQuery($qry);
			$pre->set($nuevo->getProductoId());
			$pre->set($nuevo->getIteracionRef()->getIteracionId());
			$pre->set($nuevo->getTitulo());
			$pre->set($nuevo->getDescripcion());
			$pre->set($nuevo->getEstado());
			$pre->set($nuevo->getCriterioAcepta());
			$pre->set($nuevo->getImportancia());
                        $pre->set($nuevo->getEstimacion());
                        $pre->set($nuevo->getAsignadoARef()->getUsuarioId());
			$pre->set($nuevo->getHistoria());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Producto", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
			$tran->commit();
		}catch(Exception $e){
			$tran->rollback();
			throw new GlobalException("ProductoData.create ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function listByFilter($proyectoId,$itemTipo, $iteracionId = '') {//CRUD create, reader, update, delete
		$tran= new ConnectDb();
		$tran->getConnection();
		$li=array();
		try{
			$qry=" SELECT
(CASE  WHEN p.Estado='Removed'  THEN '' ELSE p.Estado END) AS EstadoOrdenado,
p.ProductoId,p.IteracionId,p.Titulo,p.Descripcion,p.Estado,
            	p.CriterioAcepta,p.Importancia,p.Estimacion,p.AsignadoA,p.Historia,
            	i.RutaSprint, DATE_FORMAT(p.FechaAlta, '%d/%c/%Y') as FechaAlta
        ,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w
	WHERE  w.productoId=p.productoId
	AND w.ItemTipo LIKE  ? AND w.Estado IN ('ToDo','New') ) AS EsfuerzoEnEspera
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w
	WHERE  w.productoId=p.productoId
	AND w.ItemTipo LIKE  ? AND w.Estado IN ('Open','InProgress') ) AS EsfuerzoEnCurso
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w
	WHERE  w.productoId=p.productoId
	AND w.ItemTipo LIKE  ? AND w.Estado IN ('Done','Closed','Approved') ) AS EsfuerzoCompletado
        ,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w
	WHERE  w.productoId=p.productoId
	AND w.ItemTipo LIKE  ? AND w.Estado IN ('ToDo','New','Open','InProgress','Done','Closed','Approved') ) AS EsfuerzoTotal

                FROM Producto p, Iteracion i
                WHERE  p.IteracionId=i.IteracionId AND i.ProyectoId=? ";
              if( !empty ($iteracionId)) $qry .= " AND i.IteracionId=? ";

               $qry .= "order by 1 desc, p.Importancia desc, p.ProductoId desc";
			$pre = new PrepareQuery($qry);
			$pre->set($itemTipo.'%');
			$pre->set($itemTipo.'%');
			$pre->set($itemTipo.'%');
                        $pre->set($itemTipo.'%');
			$pre->set($proyectoId);
                        if( !empty ($iteracionId)) $pre->set($iteracionId);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Producto", E_USER_ERROR. "</p>");
			$p=0;
			while( $row=mysql_fetch_array($rs) ) {
				
				$d=new Producto();
				$d->setProductoId($row["ProductoId"]);
				$d->getIteracionRef()->setIteracionId($row["IteracionId"]);
				$d->getIteracionRef()->setRutaSprint($row["RutaSprint"]);

				$d->setTitulo($row["Titulo"]);
				$d->setDescripcion($row["Descripcion"]);
				$d->setEstado($row["Estado"]);
				$d->setCriterioAcepta($row["CriterioAcepta"]);
				$d->setImportancia($row["Importancia"]);
                                $d->setEstimacion($row["Estimacion"]);
                                $d->getAsignadoARef()->setUsuarioId($row["AsignadoA"]);
                             //como la relacion con Usuario es null, entonces
                                $qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
                                        u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
                                        u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                                        FROM Usuario u
                                        WHERE  u.UsuarioId=?";
                                                $pre = new PrepareQuery($qry);
                                                $pre->set($row["AsignadoA"]);
                                                $rs2=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
                                                if( $row2=mysql_fetch_array($rs2) ) {
                                                        $d->getAsignadoARef()->setNombres($row2["Nombres"]);
                                                }
				$d->setHistoria($row["Historia"]);
                                $d->setFechaAlta($row["FechaAlta"]);
                                $d->setEsfuerzoEnEspera($row["EsfuerzoEnEspera"]);
                                $d->setEsfuerzoEnCurso($row["EsfuerzoEnCurso"]);
                                $d->setEsfuerzoCompletado($row["EsfuerzoCompletado"]);
                                $d->setEsfuerzoTotal($row["EsfuerzoTotal"]);
				$li[$p++]=$d;
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ProductoData.listByFilter ".$e->getMessage());
		}
		$tran->close();
		return $li;
	}

	public function findByPk($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$d=new Producto();
		try{
			$qry=" SELECT p.ProductoId,p.IteracionId,p.Titulo,p.Descripcion,p.Estado,
            	p.CriterioAcepta,p.Importancia,p.Estimacion,p.AsignadoA,p.Historia,
                DATE_FORMAT(p.FechaAlta, '%d/%c/%Y') as FechaAlta,
                i.RutaSprint
                FROM Producto p, Iteracion i
                WHERE  p.IteracionId=i.IteracionId AND p.ProductoId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Producto", E_USER_ERROR. "</p>");;
			if( $row=mysql_fetch_array($rs) ) {

				$d->setProductoId($row["ProductoId"]);
				$d->getIteracionRef()->setIteracionId($row["IteracionId"]);
				$d->getIteracionRef()->setRutaSprint($row["RutaSprint"]);
				$d->setTitulo($row["Titulo"]);
				$d->setDescripcion($row["Descripcion"]);
				$d->setEstado($row["Estado"]);
				$d->setCriterioAcepta($row["CriterioAcepta"]);
				$d->setImportancia($row["Importancia"]);
                                $d->setEstimacion($row["Estimacion"]);
                                $d->getAsignadoARef()->setUsuarioId($row["AsignadoA"]);
				$d->setHistoria($row["Historia"]);
                                $d->setFechaAlta($row["FechaAlta"]);
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ProductoData.findByPk ".$e->getMessage());
		}
		$tran->close();
		return $d;
	}

	public function update(Producto $dato) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" UPDATE Producto SET
                IteracionId = ?,Titulo = ?,Descripcion = ?,Estado = ?,
            	CriterioAcepta = ?,Importancia = ?,Estimacion=?,AsignadoA = ?,Historia = ?
                WHERE ProductoId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($dato->getIteracionRef()->getIteracionId());
			$pre->set($dato->getTitulo());
			$pre->set($dato->getDescripcion());
			$pre->set($dato->getEstado());
			$pre->set($dato->getCriterioAcepta());
			$pre->set($dato->getImportancia());
                        $pre->set($dato->getEstimacion());
                        $pre->set($dato->getAsignadoARef()->getUsuarioId());
			$pre->set($dato->getHistoria());
			$pre->set($dato->getProductoId());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Producto", E_USER_ERROR. "</p>");
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ProductoData.update ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function delete($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" DELETE FROM Producto WHERE ProductoId=? ";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Producto", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ProductoData.delete ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

}
?>
